/**
 * 购物车服务
 */
const util = require('../utils/util.js');
const api = require('../config/api.js');
/**
 * 获取购物车商品列表 [简易模式]
 * 更改：tabBar 购物车图标的右上角添加文本
 */
function CartGoodsCount() {
  return new Promise(function (resolve, reject) {
    util.wxrequest(api.CartGoodsCount, { random: Math.random() }).then(function (res) {
      if (res.errno === 0) {
        setCartBadge(res.data.cartTotal.goodsCount);
        resolve(res);
      } else {
        reject(res);
      }
    }).catch((err) => {
      reject(err);
    });
  });
}

/**
 * 获取购物车商品列表 [复杂模式]
 * 更改：tabBar 购物车图标的右上角添加文本
 */
function CartList() {
  return new Promise(function (resolve, reject) {
    util.wxrequest(api.CartList, { random: Math.random() }).then(function (res) {
      if (res.errno === 0) {
        setCartBadge(res.data.cartTotal.goodsCount);
        resolve(res);
      } else {
        reject(res);
      }
    }).catch((err) => {
      reject(err);
    });
  });
}

/**
 * 购物车商品 添加或减少
 * @desc  如果购物车无当前商品，则添加；购物车内当前商品为1时，不允许减(如需删除请调用删除接口)；
 * @param int goodsId 商品id
 * @param int productId 货品id（商品时，值等于0）
 * @param int number 数量（正或负）
 * @return  json 购物车所有商品
 */
function CartAdd(goodsId, productId, number) {
  return new Promise(function (resolve, reject) {
    util.wxrequest(api.CartAdd, { goodsId: goodsId, productId: productId, number: number, random: Math.random() }, "POST")
      .then((res) => {
        if (res.errno == 0) {
          //成功
          setCartBadge(res.data.cartTotal.goodsCount);
          resolve(res);
        } else {
          //失败
          util.showToast(res.error);
          reject(res);
        }
      }).catch((err) => {
        reject(err);
      });
  });
}

/**
 * 购物车商品 删除
 * @param string productIds 商品ID和货品ID的组合以下划线连接，比如：array("250_230","33_55");
 * @return  json 购物车所有商品
 */
function CartDelete(productIds) {
  return new Promise(function (resolve, reject) {
    util.wxrequest(api.CartDelete, { productIds: productIds, random: Math.random() }, "POST").then(function (res) {
      if (res.errno == 0) {
        //成功
        setCartBadge(res.data.cartTotal.goodsCount);
        resolve(res);
      } else {
        //失败
        util.showToast(res.error);
        reject(res);
      }
    }).catch((err) => {
      reject(err);
    });
  });
}

/**
 * tabBar购物车图标的右上角添加文本
 */
function setCartBadge(goodsCount = 0) {
  if (goodsCount == 0) {
    wx.removeTabBarBadge({
      index: 2
    })
  } else {
    wx.setTabBarBadge({
      index: 2,
      text: goodsCount.toString()
    })
  }
}

module.exports = {
  CartGoodsCount,
  CartList,
  CartAdd,
  CartDelete,
  setCartBadge
};